/**
 * 错误处理中间件
 * 统一处理应用中的错误
 */

/**
 * 错误处理中间件
 * @returns {Function} 错误处理中间件函数
 */
const errorHandler = () => {
  return async (ctx, next) => {
    try {
      await next();
    } catch (err) {
      // 记录错误日志
      console.error('服务器错误:', err);
      
      // 设置响应状态码
      ctx.status = err.status || err.statusCode || 500;
      
      // 构建错误响应
      const errorResponse = {
        success: false,
        error: {
          message: err.message || '服务器内部错误',
          code: err.code || 'INTERNAL_ERROR',
          timestamp: new Date().toISOString()
        }
      };
      
      // 开发环境下返回详细错误信息
      if (process.env.NODE_ENV === 'development') {
        errorResponse.error.stack = err.stack;
        errorResponse.error.details = err.details;
      }
      
      // 设置响应体
      ctx.body = errorResponse;
      
      // 触发应用级错误事件
      ctx.app.emit('error', err, ctx);
    }
  };
};

/**
 * 404处理中间件
 * @returns {Function} 404处理中间件函数
 */
const notFoundHandler = () => {
  return async (ctx, next) => {
    await next();
    
    if (ctx.status === 404) {
      ctx.body = {
        success: false,
        error: {
          message: '请求的资源不存在',
          code: 'NOT_FOUND',
          timestamp: new Date().toISOString()
        }
      };
    }
  };
};

module.exports = {
  errorHandler,
  notFoundHandler
};